@crossdelta/platform-sdk 0.19.3 → 0.19.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/templates/nest-microservice/Dockerfile.hbs +2 -2
- package/bin/templates/workspace/.github/actions/generate-scope-matrix/action.yml +4 -0
- package/bin/templates/workspace/.github/actions/generate-scope-matrix/index.js +15 -0
- package/bin/templates/workspace/.github/actions/prepare-build-context/action.yml +10 -3
- package/bin/templates/workspace/.github/workflows/build-and-deploy.yml.hbs +5 -19
- package/bin/templates/workspace/infra/package.json.hbs +2 -2
- package/bin/templates/workspace/packages/contracts/package.json.hbs +2 -2
- package/bin/templates/workspace/turbo.json +1 -1
- package/package.json +4 -3
- package/dist/facade.js.map +0 -1
- package/dist/facade.mjs.map +0 -1
- package/dist/plugin-types.js.map +0 -1
- package/dist/plugin-types.mjs.map +0 -1
- package/dist/plugin.js.map +0 -1
- package/dist/plugin.mjs.map +0 -1
package/dist/plugin-types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../cli/src/plugin-types.ts"],"sourcesContent":["/**\n * Plugin System Types - Public API\n *\n * pf owns and defines these interfaces.\n * Plugins MUST import these and implement them.\n *\n * This is the ONLY public export for plugin development.\n */\n\nexport type {\n LoadedPlugin,\n PfCommand,\n PfCommandArg,\n PfCommandOption,\n PfFlow,\n PfPlugin,\n PfPluginContext,\n} from './core/plugins'\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/plugin.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../cli/src/core/plugins/index.ts","../cli/src/core/plugins/loader.ts"],"sourcesContent":["/**\n * Plugin System\n *\n * pf owns and defines the plugin interfaces.\n * Plugins MUST adapt to these interfaces.\n */\n\nexport {\n createPluginContext,\n loadPluginFromModule,\n validatePlugin,\n validatePluginStrict,\n} from './loader'\nexport type {\n LoadedPlugin,\n PfCommand,\n PfCommandArg,\n PfCommandOption,\n PfFlow,\n PfPlugin,\n PfPluginContext,\n PfWorkspaceContext,\n} from './types'\n","/**\n * Plugin Loader\n *\n * pf owns the plugin interface. Plugins MUST conform exactly.\n * Strict validation - no duck-typing, no fallbacks.\n */\nimport type { LoadedPlugin, PfPlugin, PfPluginContext, PfWorkspaceContext } from './types'\n\nconst defaultLogger: PfPluginContext['logger'] = {\n debug: () => {},\n info: console.log,\n warn: console.warn,\n error: console.error,\n}\n\nconst isObject = (val: unknown): val is Record<string, unknown> =>\n val !== null && typeof val === 'object'\n\nconst isNonEmptyString = (val: unknown): val is string =>\n typeof val === 'string' && val.length > 0\n\nconst isString = (val: unknown): val is string =>\n typeof val === 'string'\n\nconst isFunction = (val: unknown): val is (...args: unknown[]) => unknown =>\n typeof val === 'function'\n\n/**\n * Validates a single command conforms to PfCommand interface\n */\nconst validateCommand = (cmd: unknown, index: number): string[] => {\n if (!isObject(cmd)) return [`commands[${index}]: must be an object`]\n\n return [\n !isNonEmptyString(cmd.name) && `commands[${index}]: missing or invalid 'name'`,\n !isString(cmd.description) && `commands[${index}]: missing or invalid 'description'`,\n !Array.isArray(cmd.args) && `commands[${index}]: missing 'args' array`,\n !Array.isArray(cmd.options) && `commands[${index}]: missing 'options' array`,\n !isFunction(cmd.run) && `commands[${index}]: missing 'run' function`,\n ].filter((e): e is string => e !== false)\n}\n\n/**\n * Validates that an object conforms to the PfPlugin interface\n */\nexport const validatePlugin = (obj: unknown): obj is PfPlugin => {\n if (!isObject(obj)) return false\n\n return (\n isNonEmptyString(obj.name) &&\n isString(obj.version) &&\n Array.isArray(obj.commands) &&\n Array.isArray(obj.flows) &&\n isFunction(obj.setup)\n )\n}\n\n/**\n * Detailed validation with error messages\n */\nexport const validatePluginStrict = (obj: unknown): string[] => {\n if (!isObject(obj)) return ['Plugin must be an object']\n\n const baseErrors = [\n !isNonEmptyString(obj.name) && \"Missing or invalid 'name'\",\n !isString(obj.version) && \"Missing or invalid 'version'\",\n !Array.isArray(obj.commands) && \"Missing 'commands' array\",\n !Array.isArray(obj.flows) && \"Missing 'flows' array\",\n !isFunction(obj.setup) && \"Missing 'setup' function\",\n ].filter((e): e is string => e !== false)\n\n const commandErrors = Array.isArray(obj.commands)\n ? obj.commands.flatMap((cmd, i) => validateCommand(cmd, i))\n : []\n\n return [...baseErrors, ...commandErrors]\n}\n\n/**\n * Create a plugin context from workspace discovery\n */\nexport const createPluginContext = (\n workspace: PfWorkspaceContext,\n logger: PfPluginContext['logger'] = defaultLogger,\n): PfPluginContext => ({\n workspace,\n logger,\n})\n\n/**\n * Load and initialize a plugin from a module\n *\n * @param moduleName - The module to import (e.g., '@crossdelta/cloudevents')\n * @param context - Full plugin context with workspace info\n */\nexport const loadPluginFromModule = async (\n moduleName: string,\n context: PfPluginContext,\n): Promise<LoadedPlugin> => {\n const { logger } = context\n\n logger.debug(`Loading plugin from module: ${moduleName}`)\n\n const mod = await import(moduleName)\n\n const createPlugin = mod.createPfPlugin || mod.default?.createPfPlugin\n if (!isFunction(createPlugin)) {\n throw new Error(`Module ${moduleName} does not export createPfPlugin`)\n }\n\n const plugin = createPlugin({\n contractsPath: context.workspace.contracts.path,\n contractsPackage: context.workspace.contracts.packageName,\n availableServices: context.workspace.availableServices,\n })\n\n const errors = validatePluginStrict(plugin)\n if (errors.length > 0) {\n throw new Error(`Plugin from ${moduleName} does not conform to PfPlugin interface:\\n - ${errors.join('\\n - ')}`)\n }\n\n const validatedPlugin = plugin as PfPlugin\n\n logger.debug(`Loaded plugin: ${validatedPlugin.name} v${validatedPlugin.version}`)\n\n await validatedPlugin.setup(context)\n\n return {\n plugin: validatedPlugin,\n source: moduleName,\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/plugin.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../cli/src/core/plugins/loader.ts"],"sourcesContent":["/**\n * Plugin Loader\n *\n * pf owns the plugin interface. Plugins MUST conform exactly.\n * Strict validation - no duck-typing, no fallbacks.\n */\nimport type { LoadedPlugin, PfPlugin, PfPluginContext, PfWorkspaceContext } from './types'\n\nconst defaultLogger: PfPluginContext['logger'] = {\n debug: () => {},\n info: console.log,\n warn: console.warn,\n error: console.error,\n}\n\nconst isObject = (val: unknown): val is Record<string, unknown> =>\n val !== null && typeof val === 'object'\n\nconst isNonEmptyString = (val: unknown): val is string =>\n typeof val === 'string' && val.length > 0\n\nconst isString = (val: unknown): val is string =>\n typeof val === 'string'\n\nconst isFunction = (val: unknown): val is (...args: unknown[]) => unknown =>\n typeof val === 'function'\n\n/**\n * Validates a single command conforms to PfCommand interface\n */\nconst validateCommand = (cmd: unknown, index: number): string[] => {\n if (!isObject(cmd)) return [`commands[${index}]: must be an object`]\n\n return [\n !isNonEmptyString(cmd.name) && `commands[${index}]: missing or invalid 'name'`,\n !isString(cmd.description) && `commands[${index}]: missing or invalid 'description'`,\n !Array.isArray(cmd.args) && `commands[${index}]: missing 'args' array`,\n !Array.isArray(cmd.options) && `commands[${index}]: missing 'options' array`,\n !isFunction(cmd.run) && `commands[${index}]: missing 'run' function`,\n ].filter((e): e is string => e !== false)\n}\n\n/**\n * Validates that an object conforms to the PfPlugin interface\n */\nexport const validatePlugin = (obj: unknown): obj is PfPlugin => {\n if (!isObject(obj)) return false\n\n return (\n isNonEmptyString(obj.name) &&\n isString(obj.version) &&\n Array.isArray(obj.commands) &&\n Array.isArray(obj.flows) &&\n isFunction(obj.setup)\n )\n}\n\n/**\n * Detailed validation with error messages\n */\nexport const validatePluginStrict = (obj: unknown): string[] => {\n if (!isObject(obj)) return ['Plugin must be an object']\n\n const baseErrors = [\n !isNonEmptyString(obj.name) && \"Missing or invalid 'name'\",\n !isString(obj.version) && \"Missing or invalid 'version'\",\n !Array.isArray(obj.commands) && \"Missing 'commands' array\",\n !Array.isArray(obj.flows) && \"Missing 'flows' array\",\n !isFunction(obj.setup) && \"Missing 'setup' function\",\n ].filter((e): e is string => e !== false)\n\n const commandErrors = Array.isArray(obj.commands)\n ? obj.commands.flatMap((cmd, i) => validateCommand(cmd, i))\n : []\n\n return [...baseErrors, ...commandErrors]\n}\n\n/**\n * Create a plugin context from workspace discovery\n */\nexport const createPluginContext = (\n workspace: PfWorkspaceContext,\n logger: PfPluginContext['logger'] = defaultLogger,\n): PfPluginContext => ({\n workspace,\n logger,\n})\n\n/**\n * Load and initialize a plugin from a module\n *\n * @param moduleName - The module to import (e.g., '@crossdelta/cloudevents')\n * @param context - Full plugin context with workspace info\n */\nexport const loadPluginFromModule = async (\n moduleName: string,\n context: PfPluginContext,\n): Promise<LoadedPlugin> => {\n const { logger } = context\n\n logger.debug(`Loading plugin from module: ${moduleName}`)\n\n const mod = await import(moduleName)\n\n const createPlugin = mod.createPfPlugin || mod.default?.createPfPlugin\n if (!isFunction(createPlugin)) {\n throw new Error(`Module ${moduleName} does not export createPfPlugin`)\n }\n\n const plugin = createPlugin({\n contractsPath: context.workspace.contracts.path,\n contractsPackage: context.workspace.contracts.packageName,\n availableServices: context.workspace.availableServices,\n })\n\n const errors = validatePluginStrict(plugin)\n if (errors.length > 0) {\n throw new Error(`Plugin from ${moduleName} does not conform to PfPlugin interface:\\n - ${errors.join('\\n - ')}`)\n }\n\n const validatedPlugin = plugin as PfPlugin\n\n logger.debug(`Loaded plugin: ${validatedPlugin.name} v${validatedPlugin.version}`)\n\n await validatedPlugin.setup(context)\n\n return {\n plugin: validatedPlugin,\n source: moduleName,\n }\n}\n"],"mappings":"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","names":[]}
|