Ver código fonte

Class inputs ordering - alternative approach

Leszek Wiesner 4 anos atrás
pai
commit
4f9ef06825

+ 4 - 2
content-directory-schemas/src/consts/index.ts → content-directory-schemas/inputs/classes/index.js

@@ -1,5 +1,4 @@
-// Class order (needs to be inline with query node mappings)
-export const EXPECTED_CLASS_ORDER = [
+const EXPECTED_CLASS_ORDER = [
   'Channel',
   'ContentCategory',
   'HttpMediaLocation',
@@ -14,3 +13,6 @@ export const EXPECTED_CLASS_ORDER = [
   'VideoMediaEncoding',
   'FeaturedVideo',
 ]
+
+// Exports class input jsons in a predictable order
+module.exports = EXPECTED_CLASS_ORDER.map((className) => require(`./${className}Class.json`))

+ 12 - 14
content-directory-schemas/src/helpers/inputs.ts

@@ -2,7 +2,6 @@ import path from 'path'
 import fs from 'fs'
 import { CreateClass, AddClassSchema } from '../../types/extrinsics'
 import { EntityBatch } from '../../types/EntityBatch'
-import { EXPECTED_CLASS_ORDER } from '../consts'
 
 export const INPUTS_LOCATION = path.join(__dirname, '../../inputs')
 export const INPUT_TYPES = ['classes', 'schemas', 'entityBatches'] as const
@@ -16,26 +15,25 @@ export function getInputs<Schema = any>(
   inputType: InputType,
   rootInputsLocation = INPUTS_LOCATION
 ): FetchedInput<Schema>[] {
-  return fs.readdirSync(path.join(rootInputsLocation, inputType)).map((fileName) => {
-    const inputJson = fs.readFileSync(path.join(rootInputsLocation, inputType, fileName)).toString()
-    return {
+  const inputs: FetchedInput<Schema>[] = []
+  fs.readdirSync(path.join(rootInputsLocation, inputType)).forEach((fileName) => {
+    const inputFilePath = path.join(rootInputsLocation, inputType, fileName)
+    if (path.extname(inputFilePath) !== '.json') {
+      return
+    }
+    const inputJson = fs.readFileSync(inputFilePath).toString()
+    inputs.push({
       fileName,
       data: JSON.parse(inputJson) as Schema,
-    }
-  })
-}
-
-export function getSortedClassInputs(rootInputsLocation = INPUTS_LOCATION): FetchedInput<CreateClass>[] {
-  return getInputs<CreateClass>('classes', rootInputsLocation).sort((a, b) => {
-    if (EXPECTED_CLASS_ORDER.indexOf(a.data.name) === -1) return 1
-    if (EXPECTED_CLASS_ORDER.indexOf(b.data.name) === -1) return -1
-    return EXPECTED_CLASS_ORDER.indexOf(a.data.name) - EXPECTED_CLASS_ORDER.indexOf(b.data.name)
+    })
   })
+  return inputs
 }
 
 export function getInitializationInputs(rootInputsLocation = INPUTS_LOCATION) {
   return {
-    classInputs: getSortedClassInputs(rootInputsLocation).map(({ data }) => data),
+    // eslint-disable-next-line @typescript-eslint/no-var-requires
+    classInputs: require('../../inputs/classes/index.js') as CreateClass[],
     schemaInputs: getInputs<AddClassSchema>('schemas').map(({ data }) => data),
     entityBatchInputs: getInputs<EntityBatch>('entityBatches').map(({ data }) => data),
   }

+ 0 - 1
content-directory-schemas/src/index.ts

@@ -4,4 +4,3 @@ export { getInputs, getInitializationInputs, getInputsLocation } from './helpers
 export { isReference, isSingle } from './helpers/propertyType'
 export { getSchemasLocation } from './helpers/schemas'
 export { default as initializeContentDir } from './helpers/initialize'
-export { EXPECTED_CLASS_ORDER } from './consts'