@kosdev-code/kos-codegen-core 3.0.6 → 3.0.8

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/index.d.ts CHANGED
@@ -12,6 +12,6 @@ export { setCodegenLogger, getCodegenLogger } from './lib/logger';
12
12
  export { getCurrentDirectoryName, getProject, getKosProjectConfiguration, getKosModelConfiguration, getKosModelConfigProp, addKosModelConfiguration, } from './lib/kos-config';
13
13
  export type { KosModelConfiguration, KosProjectConfiguration, } from './lib/kos-config';
14
14
  export { getTemplateDir } from './lib/template-resolver';
15
- export { generateSplashProject, generateInit, normalizeOptions, appendBarrelExport, updateModelIndex, generateHook, generateContext, generateContainerModel, generateCompanionModel, generateModel, addFutureToModel, addContainerSupportToModel, addModelEffectToModel, addDependencyToModel, addTopicHandlerToModel, addConfigPropertyToModel, addServiceRequestToModel, addPropertyToModel, addComputedToModel, validateModel, describeModel, lookupSdkType, generateComponent, PLUGIN_TYPES, CONTRIBUTION_TYPE_MAP, LOCALIZED_PLUGIN_TYPES, KOS_JSON_PATHS, PluginHandlerFactory, BasePluginHandler, KosConfigBuilder, ValidationError, } from './lib/generators';
16
- export type { SplashProjectOptions, KosInitOptions, KosBaseGeneratorOptions, NormalizedOptions, HookOptions, ContextOptions, ContainerModelOptions, CompanionModelOptions, ModelOptions, GenerateModelParams, AddFutureToModelOptions, NormalizedAddFutureToModelOptions, AddContainerSupportOptions, AddModelEffectOptions, AddDependencyOptions, AddTopicHandlerOptions, AddConfigPropertyOptions, AddServiceRequestOptions, AddPropertyOptions, AddComputedOptions, ValidateModelOptions, ValidationFinding, ValidationResult, DescribeModelOptions, DescribedMember, ModelDescription, LookupSdkTypeOptions, SdkSymbolDeclaration, SdkTypeLookupResult, ComponentOptions, NormalizedComponentOptions, PluginConfiguration, PluginContribution, ExperienceConfig, PluginType, PluginHandler, } from './lib/generators';
15
+ export { generateSplashProject, generateInit, normalizeOptions, appendBarrelExport, updateModelIndex, generateHook, generateContext, generateContainerModel, generateCompanionModel, generateModel, addFutureToModel, addContainerSupportToModel, addModelEffectToModel, addDependencyToModel, addChildToModel, addTopicHandlerToModel, addConfigPropertyToModel, addServiceRequestToModel, addPropertyToModel, addComputedToModel, validateModel, describeModel, lookupSdkType, generateComponent, PLUGIN_TYPES, CONTRIBUTION_TYPE_MAP, LOCALIZED_PLUGIN_TYPES, KOS_JSON_PATHS, PluginHandlerFactory, BasePluginHandler, KosConfigBuilder, ValidationError, } from './lib/generators';
16
+ export type { SplashProjectOptions, KosInitOptions, KosBaseGeneratorOptions, NormalizedOptions, HookOptions, ContextOptions, ContainerModelOptions, CompanionModelOptions, ModelOptions, GenerateModelParams, AddFutureToModelOptions, NormalizedAddFutureToModelOptions, AddContainerSupportOptions, AddModelEffectOptions, AddDependencyOptions, AddChildOptions, ChildShape, AddTopicHandlerOptions, AddConfigPropertyOptions, AddServiceRequestOptions, AddPropertyOptions, AddComputedOptions, ValidateModelOptions, ValidationFinding, ValidationResult, DescribeModelOptions, DescribedMember, ModelDescription, LookupSdkTypeOptions, SdkSymbolDeclaration, SdkTypeLookupResult, ComponentOptions, NormalizedComponentOptions, PluginConfiguration, PluginContribution, ExperienceConfig, PluginType, PluginHandler, } from './lib/generators';
17
17
  //# sourceMappingURL=index.d.ts.map
package/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../packages/kos-codegen-core/src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAGhF,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAGlE,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,GACX,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,UAAU,EACV,YAAY,GACb,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGlE,OAAO,EACL,uBAAuB,EACvB,UAAU,EACV,0BAA0B,EAC1B,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAGzD,OAAO,EACL,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,aAAa,EACb,gBAAgB,EAChB,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,mBAAmB,EACnB,uBAAuB,EACvB,iCAAiC,EACjC,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,EACV,aAAa,GACd,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../packages/kos-codegen-core/src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAGhF,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAGlE,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,GACX,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,UAAU,EACV,YAAY,GACb,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGlE,OAAO,EACL,uBAAuB,EACvB,UAAU,EACV,0BAA0B,EAC1B,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAGzD,OAAO,EACL,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,aAAa,EACb,gBAAgB,EAChB,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,mBAAmB,EACnB,uBAAuB,EACvB,iCAAiC,EACjC,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,UAAU,EACV,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,EACV,aAAa,GACd,MAAM,kBAAkB,CAAC"}
package/index.js CHANGED
@@ -607,6 +607,13 @@ function updateModelIndex(codegenFs, indexPath, modelPath) {
607
607
  ts__namespace.ScriptTarget.Latest,
608
608
  true
609
609
  );
610
+ const alreadyExported = sourceFile.statements.some(
611
+ (st) => ts__namespace.isExportDeclaration(st) && st.moduleSpecifier !== void 0 && ts__namespace.isStringLiteral(st.moduleSpecifier) && st.moduleSpecifier.text === `./${modelPath}`
612
+ );
613
+ if (alreadyExported) {
614
+ logger.info(`Export for ${modelPath} already present in ${indexPath}`);
615
+ return;
616
+ }
610
617
  const exportDeclaration = ts__namespace.factory.createExportDeclaration(
611
618
  void 0,
612
619
  false,
@@ -1781,10 +1788,11 @@ function addDecoratedProperty(cls, spec) {
1781
1788
  cls.insertProperty(propertyInsertIndex(cls), {
1782
1789
  name: spec.name,
1783
1790
  type: spec.type,
1791
+ initializer: spec.initializer,
1784
1792
  scope: spec.scope ? SCOPE_MAP[spec.scope] : void 0,
1785
- hasExclamationToken: !!spec.hasExclamation,
1793
+ hasExclamationToken: spec.initializer ? false : !!spec.hasExclamation,
1786
1794
  decorators: [
1787
- {
1795
+ spec.bare && !spec.decoratorArgsText ? { name: spec.decoratorName } : {
1788
1796
  name: spec.decoratorName,
1789
1797
  arguments: spec.decoratorArgsText ? [spec.decoratorArgsText] : []
1790
1798
  }
@@ -1887,7 +1895,7 @@ function addModelEffectToModel(codegenFs, options, projects) {
1887
1895
  });
1888
1896
  return { modelFilePath };
1889
1897
  }
1890
- const FRAMEWORK_TYPES = /* @__PURE__ */ new Set(["IKosDataModel", "IKosIdentifiable"]);
1898
+ const FRAMEWORK_TYPES$1 = /* @__PURE__ */ new Set(["IKosDataModel", "IKosIdentifiable"]);
1891
1899
  function addDependencyToModel(codegenFs, options, projects) {
1892
1900
  const logger = getCodegenLogger();
1893
1901
  const { modelFilePath } = resolveModelFilePath(codegenFs, options, projects);
@@ -1909,7 +1917,7 @@ function addDependencyToModel(codegenFs, options, projects) {
1909
1917
  )?.[1];
1910
1918
  if (bean) named.push({ name: bean });
1911
1919
  const depType = options.dependencyType?.trim();
1912
- if (depType && /^[A-Za-z_$][\w$]*$/.test(depType) && !FRAMEWORK_TYPES.has(depType)) {
1920
+ if (depType && /^[A-Za-z_$][\w$]*$/.test(depType) && !FRAMEWORK_TYPES$1.has(depType)) {
1913
1921
  named.push({ name: depType, isTypeOnly: true });
1914
1922
  }
1915
1923
  if (named.length) ensureNamedImport(sf, options.dependencyPackage, named);
@@ -1926,6 +1934,61 @@ function addDependencyToModel(codegenFs, options, projects) {
1926
1934
  });
1927
1935
  return { modelFilePath };
1928
1936
  }
1937
+ const FRAMEWORK_TYPES = /* @__PURE__ */ new Set(["IKosDataModel", "IKosIdentifiable"]);
1938
+ function addChildToModel(codegenFs, options, projects) {
1939
+ const logger = getCodegenLogger();
1940
+ const shape = options.shape ?? "single";
1941
+ const { modelFilePath } = resolveModelFilePath(codegenFs, options, projects);
1942
+ if (!codegenFs.exists(modelFilePath)) {
1943
+ throw new Error(`Model file not found: ${modelFilePath}`);
1944
+ }
1945
+ logger.info(
1946
+ `Adding @kosChild "${options.propertyName}" (${shape}) to ${options.modelName}`
1947
+ );
1948
+ const childType = options.childType?.trim();
1949
+ transformSourceFile(codegenFs, modelFilePath, (sf) => {
1950
+ const sdk = resolveSdkModuleSpecifier(sf);
1951
+ const sdkImports = [
1952
+ { name: "kosChild" }
1953
+ ];
1954
+ if (shape === "container") sdkImports.push({ name: "KosModelContainer" });
1955
+ ensureNamedImport(sf, sdk, sdkImports);
1956
+ if (options.childPackage && childType && /^[A-Za-z_$][\w$]*$/.test(childType) && !FRAMEWORK_TYPES.has(childType)) {
1957
+ ensureNamedImport(sf, options.childPackage, [
1958
+ { name: childType, isTypeOnly: true }
1959
+ ]);
1960
+ }
1961
+ const cls = getModelClass(sf);
1962
+ if (shape === "container") {
1963
+ addDecoratedProperty(cls, {
1964
+ name: options.propertyName,
1965
+ decoratorName: "kosChild",
1966
+ bare: true,
1967
+ initializer: `new KosModelContainer<${childType}>()`,
1968
+ scope: "private"
1969
+ });
1970
+ } else if (shape === "array") {
1971
+ addDecoratedProperty(cls, {
1972
+ name: options.propertyName,
1973
+ decoratorName: "kosChild",
1974
+ bare: true,
1975
+ type: `${childType}[]`,
1976
+ initializer: "[]",
1977
+ scope: "private"
1978
+ });
1979
+ } else {
1980
+ addDecoratedProperty(cls, {
1981
+ name: options.propertyName,
1982
+ decoratorName: "kosChild",
1983
+ bare: true,
1984
+ type: childType,
1985
+ scope: "private",
1986
+ hasExclamation: true
1987
+ });
1988
+ }
1989
+ });
1990
+ return { modelFilePath };
1991
+ }
1929
1992
  function addTopicHandlerToModel(codegenFs, options, projects) {
1930
1993
  const logger = getCodegenLogger();
1931
1994
  const { modelFilePath } = resolveModelFilePath(codegenFs, options, projects);
@@ -3014,6 +3077,7 @@ exports.PLUGIN_TYPES = PLUGIN_TYPES;
3014
3077
  exports.PluginHandlerFactory = PluginHandlerFactory;
3015
3078
  exports.TrackingFileSystem = TrackingFileSystem;
3016
3079
  exports.ValidationError = ValidationError;
3080
+ exports.addChildToModel = addChildToModel;
3017
3081
  exports.addComputedToModel = addComputedToModel;
3018
3082
  exports.addConfigPropertyToModel = addConfigPropertyToModel;
3019
3083
  exports.addContainerSupportToModel = addContainerSupportToModel;