@backstage/plugin-scaffolder 1.34.2 → 1.34.3

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/CHANGELOG.md CHANGED
@@ -1,5 +1,50 @@
1
1
  # @backstage/plugin-scaffolder
2
2
 
3
+ ## 1.34.3
4
+
5
+ ### Patch Changes
6
+
7
+ - 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility.
8
+ - Updated dependencies
9
+ - @backstage/frontend-plugin-api@0.13.0
10
+ - @backstage/core-compat-api@0.5.4
11
+ - @backstage/plugin-catalog-react@1.21.3
12
+ - @backstage/integration@1.18.2
13
+ - @backstage/plugin-scaffolder-react@1.19.3
14
+ - @backstage/core-components@0.18.3
15
+ - @backstage/core-plugin-api@1.12.0
16
+ - @backstage/plugin-permission-react@0.4.38
17
+ - @backstage/catalog-model@1.7.6
18
+ - @backstage/plugin-techdocs-react@1.3.5
19
+ - @backstage/catalog-client@1.12.1
20
+ - @backstage/integration-react@1.2.12
21
+ - @backstage/plugin-catalog-common@1.1.7
22
+ - @backstage/plugin-scaffolder-common@1.7.3
23
+
24
+ ## 1.34.3-next.0
25
+
26
+ ### Patch Changes
27
+
28
+ - 05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript's `erasableSyntaxOnly` setting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility.
29
+ - Updated dependencies
30
+ - @backstage/plugin-scaffolder-react@1.19.3-next.0
31
+ - @backstage/plugin-permission-react@0.4.38-next.0
32
+ - @backstage/plugin-catalog-react@1.21.3-next.0
33
+ - @backstage/core-plugin-api@1.11.2-next.0
34
+ - @backstage/core-components@0.18.3-next.0
35
+ - @backstage/catalog-model@1.7.6-next.0
36
+ - @backstage/integration@1.18.2-next.0
37
+ - @backstage/frontend-plugin-api@0.12.2-next.0
38
+ - @backstage/catalog-client@1.12.1-next.0
39
+ - @backstage/core-compat-api@0.5.4-next.0
40
+ - @backstage/errors@1.2.7
41
+ - @backstage/integration-react@1.2.12-next.0
42
+ - @backstage/types@1.2.2
43
+ - @backstage/plugin-catalog-common@1.1.7-next.0
44
+ - @backstage/plugin-scaffolder-common@1.7.3-next.0
45
+ - @backstage/plugin-techdocs-common@0.1.1
46
+ - @backstage/plugin-techdocs-react@1.3.5-next.0
47
+
3
48
  ## 1.34.2
4
49
 
5
50
  ### Patch Changes
@@ -3,6 +3,7 @@ import { formDecoratorsApiRef } from './ref.esm.js';
3
3
  import { FormDecoratorBlueprint } from '@backstage/plugin-scaffolder-react/alpha';
4
4
 
5
5
  class DefaultScaffolderFormDecoratorsApi {
6
+ options;
6
7
  constructor(options) {
7
8
  this.options = options;
8
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FormDecoratorsApi.esm.js","sources":["../../../src/alpha/api/FormDecoratorsApi.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ApiBlueprint,\n createExtensionInput,\n} from '@backstage/frontend-plugin-api';\nimport { ScaffolderFormDecoratorsApi } from './types';\nimport { ScaffolderFormDecorator } from '@backstage/plugin-scaffolder-react/alpha';\nimport { formDecoratorsApiRef } from './ref';\nimport { FormDecoratorBlueprint } from '@backstage/plugin-scaffolder-react/alpha';\n\n/** @alpha */\nexport class DefaultScaffolderFormDecoratorsApi\n implements ScaffolderFormDecoratorsApi\n{\n private constructor(\n private readonly options: {\n decorators: Array<ScaffolderFormDecorator>;\n },\n ) {}\n\n static create(options?: { decorators: ScaffolderFormDecorator[] }) {\n return new DefaultScaffolderFormDecoratorsApi(\n options ?? { decorators: [] },\n );\n }\n\n async getFormDecorators(): Promise<ScaffolderFormDecorator[]> {\n return this.options.decorators;\n }\n}\n\n/** @alpha */\nexport const formDecoratorsApi = ApiBlueprint.makeWithOverrides({\n name: 'form-decorators',\n inputs: {\n formDecorators: createExtensionInput([\n FormDecoratorBlueprint.dataRefs.formDecoratorLoader,\n ]),\n },\n factory(originalFactory, { inputs }) {\n const formDecorators = inputs.formDecorators.map(e =>\n e.get(FormDecoratorBlueprint.dataRefs.formDecoratorLoader),\n );\n\n return originalFactory(defineParams =>\n defineParams({\n api: formDecoratorsApiRef,\n deps: {},\n factory: () =>\n DefaultScaffolderFormDecoratorsApi.create({\n decorators: formDecorators,\n }),\n }),\n );\n },\n});\n"],"names":[],"mappings":";;;;AA0BO,MAAM,kCAAA,CAEb;AAAA,EACU,YACW,OAAA,EAGjB;AAHiB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,EAGhB;AAAA,EAEH,OAAO,OAAO,OAAA,EAAqD;AACjE,IAAA,OAAO,IAAI,kCAAA;AAAA,MACT,OAAA,IAAW,EAAE,UAAA,EAAY,EAAC;AAAE,KAC9B;AAAA,EACF;AAAA,EAEA,MAAM,iBAAA,GAAwD;AAC5D,IAAA,OAAO,KAAK,OAAA,CAAQ,UAAA;AAAA,EACtB;AACF;AAGO,MAAM,iBAAA,GAAoB,aAAa,iBAAA,CAAkB;AAAA,EAC9D,IAAA,EAAM,iBAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,gBAAgB,oBAAA,CAAqB;AAAA,MACnC,uBAAuB,QAAA,CAAS;AAAA,KACjC;AAAA,GACH;AAAA,EACA,OAAA,CAAQ,eAAA,EAAiB,EAAE,MAAA,EAAO,EAAG;AACnC,IAAA,MAAM,cAAA,GAAiB,OAAO,cAAA,CAAe,GAAA;AAAA,MAAI,CAAA,CAAA,KAC/C,CAAA,CAAE,GAAA,CAAI,sBAAA,CAAuB,SAAS,mBAAmB;AAAA,KAC3D;AAEA,IAAA,OAAO,eAAA;AAAA,MAAgB,kBACrB,YAAA,CAAa;AAAA,QACX,GAAA,EAAK,oBAAA;AAAA,QACL,MAAM,EAAC;AAAA,QACP,OAAA,EAAS,MACP,kCAAA,CAAmC,MAAA,CAAO;AAAA,UACxC,UAAA,EAAY;AAAA,SACb;AAAA,OACJ;AAAA,KACH;AAAA,EACF;AACF,CAAC;;;;"}
1
+ {"version":3,"file":"FormDecoratorsApi.esm.js","sources":["../../../src/alpha/api/FormDecoratorsApi.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ApiBlueprint,\n createExtensionInput,\n} from '@backstage/frontend-plugin-api';\nimport { ScaffolderFormDecoratorsApi } from './types';\nimport { ScaffolderFormDecorator } from '@backstage/plugin-scaffolder-react/alpha';\nimport { formDecoratorsApiRef } from './ref';\nimport { FormDecoratorBlueprint } from '@backstage/plugin-scaffolder-react/alpha';\n\n/** @alpha */\nexport class DefaultScaffolderFormDecoratorsApi\n implements ScaffolderFormDecoratorsApi\n{\n private readonly options: {\n decorators: Array<ScaffolderFormDecorator>;\n };\n\n private constructor(options: { decorators: Array<ScaffolderFormDecorator> }) {\n this.options = options;\n }\n\n static create(options?: { decorators: ScaffolderFormDecorator[] }) {\n return new DefaultScaffolderFormDecoratorsApi(\n options ?? { decorators: [] },\n );\n }\n\n async getFormDecorators(): Promise<ScaffolderFormDecorator[]> {\n return this.options.decorators;\n }\n}\n\n/** @alpha */\nexport const formDecoratorsApi = ApiBlueprint.makeWithOverrides({\n name: 'form-decorators',\n inputs: {\n formDecorators: createExtensionInput([\n FormDecoratorBlueprint.dataRefs.formDecoratorLoader,\n ]),\n },\n factory(originalFactory, { inputs }) {\n const formDecorators = inputs.formDecorators.map(e =>\n e.get(FormDecoratorBlueprint.dataRefs.formDecoratorLoader),\n );\n\n return originalFactory(defineParams =>\n defineParams({\n api: formDecoratorsApiRef,\n deps: {},\n factory: () =>\n DefaultScaffolderFormDecoratorsApi.create({\n decorators: formDecorators,\n }),\n }),\n );\n },\n});\n"],"names":[],"mappings":";;;;AA0BO,MAAM,kCAAA,CAEb;AAAA,EACmB,OAAA;AAAA,EAIT,YAAY,OAAA,EAAyD;AAC3E,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AAAA,EAEA,OAAO,OAAO,OAAA,EAAqD;AACjE,IAAA,OAAO,IAAI,kCAAA;AAAA,MACT,OAAA,IAAW,EAAE,UAAA,EAAY,EAAC;AAAE,KAC9B;AAAA,EACF;AAAA,EAEA,MAAM,iBAAA,GAAwD;AAC5D,IAAA,OAAO,KAAK,OAAA,CAAQ,UAAA;AAAA,EACtB;AACF;AAGO,MAAM,iBAAA,GAAoB,aAAa,iBAAA,CAAkB;AAAA,EAC9D,IAAA,EAAM,iBAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,gBAAgB,oBAAA,CAAqB;AAAA,MACnC,uBAAuB,QAAA,CAAS;AAAA,KACjC;AAAA,GACH;AAAA,EACA,OAAA,CAAQ,eAAA,EAAiB,EAAE,MAAA,EAAO,EAAG;AACnC,IAAA,MAAM,cAAA,GAAiB,OAAO,cAAA,CAAe,GAAA;AAAA,MAAI,CAAA,CAAA,KAC/C,CAAA,CAAE,GAAA,CAAI,sBAAA,CAAuB,SAAS,mBAAmB;AAAA,KAC3D;AAEA,IAAA,OAAO,eAAA;AAAA,MAAgB,kBACrB,YAAA,CAAa;AAAA,QACX,GAAA,EAAK,oBAAA;AAAA,QACL,MAAM,EAAC;AAAA,QACP,OAAA,EAAS,MACP,kCAAA,CAAmC,MAAA,CAAO;AAAA,UACxC,UAAA,EAAY;AAAA,SACb;AAAA,OACJ;AAAA,KACH;AAAA,EACF;AACF,CAAC;;;;"}
package/dist/alpha.d.ts CHANGED
@@ -273,7 +273,7 @@ declare class DefaultScaffolderFormDecoratorsApi implements ScaffolderFormDecora
273
273
  getFormDecorators(): Promise<ScaffolderFormDecorator[]>;
274
274
  }
275
275
  /** @alpha */
276
- declare const formDecoratorsApi: _backstage_frontend_plugin_api.ExtensionDefinition<{
276
+ declare const formDecoratorsApi: _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
277
277
  config: {};
278
278
  configInput: {};
279
279
  output: _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.AnyApiFactory, "core.api.factory", {}>;
@@ -305,7 +305,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
305
305
  namespace: string;
306
306
  }>;
307
307
  }, {
308
- "api:scaffolder": _backstage_frontend_plugin_api.ExtensionDefinition<{
308
+ "api:scaffolder": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
309
309
  kind: "api";
310
310
  name: undefined;
311
311
  config: {};
@@ -314,7 +314,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
314
314
  inputs: {};
315
315
  params: <TApi, TImpl extends TApi, TDeps extends { [name in string]: unknown; }>(params: _backstage_frontend_plugin_api.ApiFactory<TApi, TImpl, TDeps>) => _backstage_frontend_plugin_api.ExtensionBlueprintParams<_backstage_frontend_plugin_api.AnyApiFactory>;
316
316
  }>;
317
- "api:scaffolder/form-decorators": _backstage_frontend_plugin_api.ExtensionDefinition<{
317
+ "api:scaffolder/form-decorators": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
318
318
  config: {};
319
319
  configInput: {};
320
320
  output: _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.AnyApiFactory, "core.api.factory", {}>;
@@ -328,7 +328,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
328
328
  name: "form-decorators";
329
329
  params: <TApi, TImpl extends TApi, TDeps extends { [name in string]: unknown; }>(params: _backstage_frontend_plugin_api.ApiFactory<TApi, TImpl, TDeps>) => _backstage_frontend_plugin_api.ExtensionBlueprintParams<_backstage_frontend_plugin_api.AnyApiFactory>;
330
330
  }>;
331
- "api:scaffolder/form-fields": _backstage_frontend_plugin_api.ExtensionDefinition<{
331
+ "api:scaffolder/form-fields": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
332
332
  config: {};
333
333
  configInput: {};
334
334
  output: _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.AnyApiFactory, "core.api.factory", {}>;
@@ -342,7 +342,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
342
342
  name: "form-fields";
343
343
  params: <TApi, TImpl extends TApi, TDeps extends { [name in string]: unknown; }>(params: _backstage_frontend_plugin_api.ApiFactory<TApi, TImpl, TDeps>) => _backstage_frontend_plugin_api.ExtensionBlueprintParams<_backstage_frontend_plugin_api.AnyApiFactory>;
344
344
  }>;
345
- "entity-icon-link:scaffolder/launch-template": _backstage_frontend_plugin_api.ExtensionDefinition<{
345
+ "entity-icon-link:scaffolder/launch-template": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
346
346
  kind: "entity-icon-link";
347
347
  name: "launch-template";
348
348
  config: {
@@ -366,7 +366,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
366
366
  filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | ((entity: _backstage_catalog_model.Entity) => boolean);
367
367
  };
368
368
  }>;
369
- "nav-item:scaffolder": _backstage_frontend_plugin_api.ExtensionDefinition<{
369
+ "nav-item:scaffolder": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
370
370
  kind: "nav-item";
371
371
  name: undefined;
372
372
  config: {};
@@ -383,7 +383,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
383
383
  routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
384
384
  };
385
385
  }>;
386
- "page:scaffolder": _backstage_frontend_plugin_api.ExtensionDefinition<{
386
+ "page:scaffolder": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
387
387
  config: {
388
388
  path: string | undefined;
389
389
  };
@@ -408,7 +408,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
408
408
  routeRef?: _backstage_frontend_plugin_api.RouteRef;
409
409
  };
410
410
  }>;
411
- "scaffolder-form-field:scaffolder/entity-name-picker": _backstage_frontend_plugin_api.ExtensionDefinition<{
411
+ "scaffolder-form-field:scaffolder/entity-name-picker": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
412
412
  kind: "scaffolder-form-field";
413
413
  name: "entity-name-picker";
414
414
  config: {};
@@ -419,7 +419,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
419
419
  field: () => Promise<_backstage_plugin_scaffolder_react_alpha.FormField>;
420
420
  };
421
421
  }>;
422
- "scaffolder-form-field:scaffolder/entity-picker": _backstage_frontend_plugin_api.ExtensionDefinition<{
422
+ "scaffolder-form-field:scaffolder/entity-picker": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
423
423
  kind: "scaffolder-form-field";
424
424
  name: "entity-picker";
425
425
  config: {};
@@ -430,7 +430,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
430
430
  field: () => Promise<_backstage_plugin_scaffolder_react_alpha.FormField>;
431
431
  };
432
432
  }>;
433
- "scaffolder-form-field:scaffolder/entity-tags-picker": _backstage_frontend_plugin_api.ExtensionDefinition<{
433
+ "scaffolder-form-field:scaffolder/entity-tags-picker": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
434
434
  kind: "scaffolder-form-field";
435
435
  name: "entity-tags-picker";
436
436
  config: {};
@@ -441,7 +441,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
441
441
  field: () => Promise<_backstage_plugin_scaffolder_react_alpha.FormField>;
442
442
  };
443
443
  }>;
444
- "scaffolder-form-field:scaffolder/multi-entity-picker": _backstage_frontend_plugin_api.ExtensionDefinition<{
444
+ "scaffolder-form-field:scaffolder/multi-entity-picker": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
445
445
  kind: "scaffolder-form-field";
446
446
  name: "multi-entity-picker";
447
447
  config: {};
@@ -452,7 +452,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
452
452
  field: () => Promise<_backstage_plugin_scaffolder_react_alpha.FormField>;
453
453
  };
454
454
  }>;
455
- "scaffolder-form-field:scaffolder/my-groups-picker": _backstage_frontend_plugin_api.ExtensionDefinition<{
455
+ "scaffolder-form-field:scaffolder/my-groups-picker": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
456
456
  kind: "scaffolder-form-field";
457
457
  name: "my-groups-picker";
458
458
  config: {};
@@ -463,7 +463,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
463
463
  field: () => Promise<_backstage_plugin_scaffolder_react_alpha.FormField>;
464
464
  };
465
465
  }>;
466
- "scaffolder-form-field:scaffolder/owned-entity-picker": _backstage_frontend_plugin_api.ExtensionDefinition<{
466
+ "scaffolder-form-field:scaffolder/owned-entity-picker": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
467
467
  kind: "scaffolder-form-field";
468
468
  name: "owned-entity-picker";
469
469
  config: {};
@@ -474,7 +474,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
474
474
  field: () => Promise<_backstage_plugin_scaffolder_react_alpha.FormField>;
475
475
  };
476
476
  }>;
477
- "scaffolder-form-field:scaffolder/owner-picker": _backstage_frontend_plugin_api.ExtensionDefinition<{
477
+ "scaffolder-form-field:scaffolder/owner-picker": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
478
478
  kind: "scaffolder-form-field";
479
479
  name: "owner-picker";
480
480
  config: {};
@@ -485,7 +485,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
485
485
  field: () => Promise<_backstage_plugin_scaffolder_react_alpha.FormField>;
486
486
  };
487
487
  }>;
488
- "scaffolder-form-field:scaffolder/repo-branch-picker": _backstage_frontend_plugin_api.ExtensionDefinition<{
488
+ "scaffolder-form-field:scaffolder/repo-branch-picker": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
489
489
  kind: "scaffolder-form-field";
490
490
  name: "repo-branch-picker";
491
491
  config: {};
@@ -496,7 +496,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
496
496
  field: () => Promise<_backstage_plugin_scaffolder_react_alpha.FormField>;
497
497
  };
498
498
  }>;
499
- "scaffolder-form-field:scaffolder/repo-url-picker": _backstage_frontend_plugin_api.ExtensionDefinition<{
499
+ "scaffolder-form-field:scaffolder/repo-url-picker": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
500
500
  kind: "scaffolder-form-field";
501
501
  name: "repo-url-picker";
502
502
  config: {};
@@ -1,5 +1,7 @@
1
1
  const showDirectoryPicker = window.showDirectoryPicker;
2
2
  class WebFileAccess {
3
+ path;
4
+ handle;
3
5
  constructor(path, handle) {
4
6
  this.path = path;
5
7
  this.handle = handle;
@@ -14,6 +16,7 @@ class WebFileAccess {
14
16
  }
15
17
  }
16
18
  class WebDirectoryAccess {
19
+ handle;
17
20
  constructor(handle) {
18
21
  this.handle = handle;
19
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"WebFileSystemAccess.esm.js","sources":["../../../src/lib/filesystem/WebFileSystemAccess.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { TemplateDirectoryAccess, TemplateFileAccess } from './types';\n\ntype WritableFileHandle = FileSystemFileHandle & {\n createWritable(): Promise<{\n write(data: string | Blob | BufferSource): Promise<void>;\n close(): Promise<void>;\n }>;\n};\n\n// A nicer type than the one from the TS lib\nexport interface IterableDirectoryHandle extends FileSystemDirectoryHandle {\n values(): AsyncIterable<\n | ({ kind: 'file' } & WritableFileHandle)\n | ({ kind: 'directory' } & IterableDirectoryHandle)\n >;\n}\n\nconst showDirectoryPicker = (window as any).showDirectoryPicker as\n | (() => Promise<IterableDirectoryHandle>)\n | undefined;\n\nclass WebFileAccess implements TemplateFileAccess {\n constructor(\n readonly path: string,\n private readonly handle: WritableFileHandle,\n ) {}\n\n file(): Promise<File> {\n return this.handle.getFile();\n }\n\n async save(data: string | Blob | BufferSource): Promise<void> {\n const writable = await this.handle.createWritable();\n await writable.write(data);\n await writable.close();\n }\n}\n\n/** @internal */\nexport class WebDirectoryAccess implements TemplateDirectoryAccess {\n constructor(private readonly handle: IterableDirectoryHandle) {}\n\n async listFiles(): Promise<TemplateFileAccess[]> {\n const content = [];\n for await (const entry of this.listDirectoryContents(this.handle)) {\n content.push(entry);\n }\n return content;\n }\n\n private async *listDirectoryContents(\n dirHandle: IterableDirectoryHandle,\n basePath: string[] = [],\n ): AsyncIterable<TemplateFileAccess> {\n for await (const handle of dirHandle.values()) {\n if (handle.kind === 'file') {\n yield new WebFileAccess([...basePath, handle.name].join('/'), handle);\n } else if (handle.kind === 'directory') {\n // Skip git storage directory\n if (handle.name === '.git') {\n continue;\n }\n yield* this.listDirectoryContents(handle, [...basePath, handle.name]);\n }\n }\n }\n\n async createFile(options: { name: string; data: string }): Promise<void> {\n const { name, data } = options;\n let file: FileSystemFileHandle;\n\n // Current create template does not require support for nested directories\n if (name.includes('/')) {\n const [dir, path] = name.split('/');\n const handle = await this.handle.getDirectoryHandle(dir, {\n create: true,\n });\n file = await handle.getFileHandle(path, { create: true });\n } else {\n file = await this.handle.getFileHandle(name, {\n create: true,\n });\n }\n const writable = await file.createWritable();\n await writable.write(data);\n await writable.close();\n }\n}\n\n/** @internal */\nexport class WebFileSystemAccess {\n static isSupported(): boolean {\n return Boolean(showDirectoryPicker);\n }\n\n static fromHandle(handle: IterableDirectoryHandle) {\n return new WebDirectoryAccess(handle);\n }\n\n static async requestDirectoryAccess(): Promise<TemplateDirectoryAccess> {\n if (!showDirectoryPicker) {\n throw new Error('File system access is not supported');\n }\n const handle = await showDirectoryPicker();\n return new WebDirectoryAccess(handle);\n }\n\n private constructor() {}\n}\n"],"names":[],"mappings":"AAiCA,MAAM,sBAAuB,MAAA,CAAe,mBAAA;AAI5C,MAAM,aAAA,CAA4C;AAAA,EAChD,WAAA,CACW,MACQ,MAAA,EACjB;AAFS,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACQ,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAChB;AAAA,EAEH,IAAA,GAAsB;AACpB,IAAA,OAAO,IAAA,CAAK,OAAO,OAAA,EAAQ;AAAA,EAC7B;AAAA,EAEA,MAAM,KAAK,IAAA,EAAmD;AAC5D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,cAAA,EAAe;AAClD,IAAA,MAAM,QAAA,CAAS,MAAM,IAAI,CAAA;AACzB,IAAA,MAAM,SAAS,KAAA,EAAM;AAAA,EACvB;AACF;AAGO,MAAM,kBAAA,CAAsD;AAAA,EACjE,YAA6B,MAAA,EAAiC;AAAjC,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAAkC;AAAA,EAE/D,MAAM,SAAA,GAA2C;AAC/C,IAAA,MAAM,UAAU,EAAC;AACjB,IAAA,WAAA,MAAiB,KAAA,IAAS,IAAA,CAAK,qBAAA,CAAsB,IAAA,CAAK,MAAM,CAAA,EAAG;AACjE,MAAA,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,IACpB;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,OAAe,qBAAA,CACb,SAAA,EACA,QAAA,GAAqB,EAAC,EACa;AACnC,IAAA,WAAA,MAAiB,MAAA,IAAU,SAAA,CAAU,MAAA,EAAO,EAAG;AAC7C,MAAA,IAAI,MAAA,CAAO,SAAS,MAAA,EAAQ;AAC1B,QAAA,MAAM,IAAI,aAAA,CAAc,CAAC,GAAG,QAAA,EAAU,MAAA,CAAO,IAAI,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,EAAG,MAAM,CAAA;AAAA,MACtE,CAAA,MAAA,IAAW,MAAA,CAAO,IAAA,KAAS,WAAA,EAAa;AAEtC,QAAA,IAAI,MAAA,CAAO,SAAS,MAAA,EAAQ;AAC1B,UAAA;AAAA,QACF;AACA,QAAA,OAAO,IAAA,CAAK,sBAAsB,MAAA,EAAQ,CAAC,GAAG,QAAA,EAAU,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,OAAA,EAAwD;AACvE,IAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,OAAA;AACvB,IAAA,IAAI,IAAA;AAGJ,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AACtB,MAAA,MAAM,CAAC,GAAA,EAAK,IAAI,CAAA,GAAI,IAAA,CAAK,MAAM,GAAG,CAAA;AAClC,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,mBAAmB,GAAA,EAAK;AAAA,QACvD,MAAA,EAAQ;AAAA,OACT,CAAA;AACD,MAAA,IAAA,GAAO,MAAM,MAAA,CAAO,aAAA,CAAc,MAAM,EAAE,MAAA,EAAQ,MAAM,CAAA;AAAA,IAC1D,CAAA,MAAO;AACL,MAAA,IAAA,GAAO,MAAM,IAAA,CAAK,MAAA,CAAO,aAAA,CAAc,IAAA,EAAM;AAAA,QAC3C,MAAA,EAAQ;AAAA,OACT,CAAA;AAAA,IACH;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,cAAA,EAAe;AAC3C,IAAA,MAAM,QAAA,CAAS,MAAM,IAAI,CAAA;AACzB,IAAA,MAAM,SAAS,KAAA,EAAM;AAAA,EACvB;AACF;AAGO,MAAM,mBAAA,CAAoB;AAAA,EAC/B,OAAO,WAAA,GAAuB;AAC5B,IAAA,OAAO,QAAQ,mBAAmB,CAAA;AAAA,EACpC;AAAA,EAEA,OAAO,WAAW,MAAA,EAAiC;AACjD,IAAA,OAAO,IAAI,mBAAmB,MAAM,CAAA;AAAA,EACtC;AAAA,EAEA,aAAa,sBAAA,GAA2D;AACtE,IAAA,IAAI,CAAC,mBAAA,EAAqB;AACxB,MAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,IACvD;AACA,IAAA,MAAM,MAAA,GAAS,MAAM,mBAAA,EAAoB;AACzC,IAAA,OAAO,IAAI,mBAAmB,MAAM,CAAA;AAAA,EACtC;AAAA,EAEQ,WAAA,GAAc;AAAA,EAAC;AACzB;;;;"}
1
+ {"version":3,"file":"WebFileSystemAccess.esm.js","sources":["../../../src/lib/filesystem/WebFileSystemAccess.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { TemplateDirectoryAccess, TemplateFileAccess } from './types';\n\ntype WritableFileHandle = FileSystemFileHandle & {\n createWritable(): Promise<{\n write(data: string | Blob | BufferSource): Promise<void>;\n close(): Promise<void>;\n }>;\n};\n\n// A nicer type than the one from the TS lib\nexport interface IterableDirectoryHandle extends FileSystemDirectoryHandle {\n values(): AsyncIterable<\n | ({ kind: 'file' } & WritableFileHandle)\n | ({ kind: 'directory' } & IterableDirectoryHandle)\n >;\n}\n\nconst showDirectoryPicker = (window as any).showDirectoryPicker as\n | (() => Promise<IterableDirectoryHandle>)\n | undefined;\n\nclass WebFileAccess implements TemplateFileAccess {\n readonly path: string;\n private readonly handle: WritableFileHandle;\n\n constructor(path: string, handle: WritableFileHandle) {\n this.path = path;\n this.handle = handle;\n }\n\n file(): Promise<File> {\n return this.handle.getFile();\n }\n\n async save(data: string | Blob | BufferSource): Promise<void> {\n const writable = await this.handle.createWritable();\n await writable.write(data);\n await writable.close();\n }\n}\n\n/** @internal */\nexport class WebDirectoryAccess implements TemplateDirectoryAccess {\n private readonly handle: IterableDirectoryHandle;\n\n constructor(handle: IterableDirectoryHandle) {\n this.handle = handle;\n }\n\n async listFiles(): Promise<TemplateFileAccess[]> {\n const content = [];\n for await (const entry of this.listDirectoryContents(this.handle)) {\n content.push(entry);\n }\n return content;\n }\n\n private async *listDirectoryContents(\n dirHandle: IterableDirectoryHandle,\n basePath: string[] = [],\n ): AsyncIterable<TemplateFileAccess> {\n for await (const handle of dirHandle.values()) {\n if (handle.kind === 'file') {\n yield new WebFileAccess([...basePath, handle.name].join('/'), handle);\n } else if (handle.kind === 'directory') {\n // Skip git storage directory\n if (handle.name === '.git') {\n continue;\n }\n yield* this.listDirectoryContents(handle, [...basePath, handle.name]);\n }\n }\n }\n\n async createFile(options: { name: string; data: string }): Promise<void> {\n const { name, data } = options;\n let file: FileSystemFileHandle;\n\n // Current create template does not require support for nested directories\n if (name.includes('/')) {\n const [dir, path] = name.split('/');\n const handle = await this.handle.getDirectoryHandle(dir, {\n create: true,\n });\n file = await handle.getFileHandle(path, { create: true });\n } else {\n file = await this.handle.getFileHandle(name, {\n create: true,\n });\n }\n const writable = await file.createWritable();\n await writable.write(data);\n await writable.close();\n }\n}\n\n/** @internal */\nexport class WebFileSystemAccess {\n static isSupported(): boolean {\n return Boolean(showDirectoryPicker);\n }\n\n static fromHandle(handle: IterableDirectoryHandle) {\n return new WebDirectoryAccess(handle);\n }\n\n static async requestDirectoryAccess(): Promise<TemplateDirectoryAccess> {\n if (!showDirectoryPicker) {\n throw new Error('File system access is not supported');\n }\n const handle = await showDirectoryPicker();\n return new WebDirectoryAccess(handle);\n }\n\n private constructor() {}\n}\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  var name = "@backstage/plugin-scaffolder";
2
- var version = "1.34.2";
2
+ var version = "1.34.3";
3
3
  var description = "The Backstage plugin that helps you create new things";
4
4
  var backstage = {
5
5
  role: "frontend-plugin",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-scaffolder",
3
- "version": "1.34.2",
3
+ "version": "1.34.3",
4
4
  "description": "The Backstage plugin that helps you create new things",
5
5
  "backstage": {
6
6
  "role": "frontend-plugin",
@@ -70,22 +70,22 @@
70
70
  "test": "backstage-cli package test"
71
71
  },
72
72
  "dependencies": {
73
- "@backstage/catalog-client": "^1.12.0",
74
- "@backstage/catalog-model": "^1.7.5",
75
- "@backstage/core-compat-api": "^0.5.3",
76
- "@backstage/core-components": "^0.18.2",
77
- "@backstage/core-plugin-api": "^1.11.1",
73
+ "@backstage/catalog-client": "^1.12.1",
74
+ "@backstage/catalog-model": "^1.7.6",
75
+ "@backstage/core-compat-api": "^0.5.4",
76
+ "@backstage/core-components": "^0.18.3",
77
+ "@backstage/core-plugin-api": "^1.12.0",
78
78
  "@backstage/errors": "^1.2.7",
79
- "@backstage/frontend-plugin-api": "^0.12.1",
80
- "@backstage/integration": "^1.18.1",
81
- "@backstage/integration-react": "^1.2.11",
82
- "@backstage/plugin-catalog-common": "^1.1.6",
83
- "@backstage/plugin-catalog-react": "^1.21.2",
84
- "@backstage/plugin-permission-react": "^0.4.37",
85
- "@backstage/plugin-scaffolder-common": "^1.7.2",
86
- "@backstage/plugin-scaffolder-react": "^1.19.2",
79
+ "@backstage/frontend-plugin-api": "^0.13.0",
80
+ "@backstage/integration": "^1.18.2",
81
+ "@backstage/integration-react": "^1.2.12",
82
+ "@backstage/plugin-catalog-common": "^1.1.7",
83
+ "@backstage/plugin-catalog-react": "^1.21.3",
84
+ "@backstage/plugin-permission-react": "^0.4.38",
85
+ "@backstage/plugin-scaffolder-common": "^1.7.3",
86
+ "@backstage/plugin-scaffolder-react": "^1.19.3",
87
87
  "@backstage/plugin-techdocs-common": "^0.1.1",
88
- "@backstage/plugin-techdocs-react": "^1.3.4",
88
+ "@backstage/plugin-techdocs-react": "^1.3.5",
89
89
  "@backstage/types": "^1.2.2",
90
90
  "@codemirror/language": "^6.0.0",
91
91
  "@codemirror/legacy-modes": "^6.1.0",
@@ -118,13 +118,13 @@
118
118
  "zod-to-json-schema": "^3.20.4"
119
119
  },
120
120
  "devDependencies": {
121
- "@backstage/cli": "^0.34.4",
122
- "@backstage/core-app-api": "^1.19.1",
123
- "@backstage/dev-utils": "^1.1.15",
124
- "@backstage/plugin-catalog": "^1.31.4",
125
- "@backstage/plugin-permission-common": "^0.9.2",
126
- "@backstage/plugin-techdocs": "^1.15.1",
127
- "@backstage/test-utils": "^1.7.12",
121
+ "@backstage/cli": "^0.34.5",
122
+ "@backstage/core-app-api": "^1.19.2",
123
+ "@backstage/dev-utils": "^1.1.17",
124
+ "@backstage/plugin-catalog": "^1.32.0",
125
+ "@backstage/plugin-permission-common": "^0.9.3",
126
+ "@backstage/plugin-techdocs": "^1.16.0",
127
+ "@backstage/test-utils": "^1.7.13",
128
128
  "@testing-library/dom": "^10.0.0",
129
129
  "@testing-library/jest-dom": "^6.0.0",
130
130
  "@testing-library/react": "^16.0.0",